package com.pubinfo.passbook.common.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.pubinfo.passbook.common.model.dto.open.WiteoffOpenPicking;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 报账挑对记录表
 *
 * @TableName t_witeoff_open_picking
 */
@TableName(value = "t_witeoff_open_picking")
@Data
@NoArgsConstructor
@ApiModel(value = "TWiteoffOpenPicking", description = "报账挑对记录表,接收前端报账单数据")
public class TWiteoffOpenPicking implements Serializable {
  /**
   *
   */
  @TableId(type = IdType.ASSIGN_UUID, value = "id")
  @ApiModelProperty(hidden = true)
  private String id;
  
  /**
   * sap凭证号
   */
  @ApiModelProperty("sap凭证号")
  private String sapCertificateCode;
  
  /**
   * 凭证行项号
   */
  @ApiModelProperty("凭证行项号")
  private String sapItemMun;
  
  /**
   * 年份
   */
  @ApiModelProperty("年度")
  private String tYear;
  
  /**
   * 公司代码
   */
  @ApiModelProperty("公司代码")
  private String companyCode;
  
  /**
   * 科目编码	非必须	供应商、客户、总账
   */
  @ApiModelProperty("科目编码 非必须 供应商、客户、总账")
  private String accountCode;
  
  /**
   * 科目类型	非必须	1-总账、2-供应商、3-客户
   */
  @ApiModelProperty("科目类型 非必须 1-总账、2-供应商、3-客户")
  private Byte accountType;
  
  /**
   * 利润中心组
   */
  @ApiModelProperty("利润中心组")
  private String profitCenterGroupCode;
  
  /**
   * 外围系统子单Id	非必须	当业务场景是列账后付款时才是必须
   */
  @ApiModelProperty("外围系统子单Id 非必须 当业务场景是列账后付款时才是必须")
  private String otherSystemDetailId;
  
  /**
   * 挑对金额	 	当业务场景是1：冲前期借款（预付款）和3：冲预列时才是必须
   */
  @ApiModelProperty("挑对金额   当业务场景是1：冲前期借款（预付款）和3：冲预列时才是必须")
  private BigDecimal pickingSum;
  
  /**
   * 报账金额	非必须	当业务场景是列账后付款时才是必须
   */
  @ApiModelProperty("报账金额   当业务场景是列账后付款时才是必须")
  private BigDecimal writeoffSum;
  
  /**
   * 进项税金额	非必须	当“票据类型”为1、4、5、6、11时，进项税金额必须
   */
  @ApiModelProperty("进项税金额   当“票据类型”为1、4、5、6、11时，进项税金额必须")
  private BigDecimal inputTaxSum;
  
  /**
   * 是否最后一次报账	非必须	当业务场景是列账后付款，且是最后一次报账时必须 1-是，0或空-否
   */
  @ApiModelProperty("是否最后一次报账   当业务场景是列账后付款，且是最后一次报账时必须 1-是，0或空-否")
  private Byte isLastWriteoff;
  
  /**
   * 报账单id
   */
  @ApiModelProperty(hidden = true)
  private String otherSystemMainId;
  @TableField(exist = false)
  private static final long serialVersionUID = 1L;
  
  public TWiteoffOpenPicking(WiteoffOpenPicking witeoffOpenPicking, String otherSystemMainId) {
    BeanUtils.copyProperties(witeoffOpenPicking, this);
    this.otherSystemMainId = otherSystemMainId;
  }
  
  public static List<TWiteoffOpenPicking> toList(List<WiteoffOpenPicking> witeoffOpenPickings, String otherSystemMainId) {
    if (CollectionUtils.isEmpty(witeoffOpenPickings)) {
      return null;
    }
    List<TWiteoffOpenPicking> tWiteoffOpenPickings = new ArrayList<>();
    for (WiteoffOpenPicking witeoffOpenPicking : witeoffOpenPickings) {
      TWiteoffOpenPicking tWiteoffOpenPicking = new TWiteoffOpenPicking(witeoffOpenPicking, otherSystemMainId);
      tWiteoffOpenPickings.add(tWiteoffOpenPicking);
    }
    return tWiteoffOpenPickings;
  }
}